﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Project_2._2.Models;
using Project_2._2.ViewModels;
using System.IO;
using Project_2._2.Extra;
using System.Web.Security;
using PagedList;
using PagedList.Mvc;

namespace Project_2._2.Controllers
{
    public class AdminAdvertiseController : Controller
    {
        //
        // GET: /Advertise/
        private QuanLyThueXeEntities db = new QuanLyThueXeEntities();
        private Common cm = new Common();
        public ActionResult Default(int? page, string rd, string Record)
        {
            if (!Request.IsAuthenticated)
            {
                return RedirectToAction("Login", "Admin");
            }
            else
            {
                if (cm.CheckUserType(User.Identity.Name))
                {
                    if (rd != null)
                    {
                        int record = int.Parse(rd);
                        var qc = (from p in db.QuangCaos where p.isDelete == false select p).ToList().ToPagedList(page ?? 1, record);
                        ViewBag.record = rd;
                        return View(qc);
                    }
                    else
                    {
                        var qc = (from p in db.QuangCaos where p.isDelete == false select p).ToList().ToPagedList(page ?? 1, 5);
                        return View(qc);
                    }
                }
                else
                    return RedirectToAction("Login", "Admin");
            } 
        }
        [HttpPost]
        public ActionResult Default(FormCollection col, int? page)
        {
            try
            {
                int record = 0;
                if (string.IsNullOrEmpty(col["KeyWord"]))
                {
                    record = int.Parse(col["Record"]);
                    var qc = (from p in db.QuangCaos where p.isDelete == false select p).ToList().ToPagedList(page ?? 1, record);
                    ViewBag.record = col["Record"];
                    return View(qc);
                }
                else
                {
                    string SearchBy = col["SearchBy"].ToString();
                    string key = col["KeyWord"].ToString();

                    switch (SearchBy)
                    {
                        case "TenCtyQuangCao":
                            var qc = (from p in db.QuangCaos where p.isDelete == false & p.TenCtyQuangCao.Contains(key) select p).ToList().ToPagedList(page ?? 1, 10);
                            ViewBag.record = "1";
                            return View(qc); break;
                        case "ViTri":
                            qc = (from p in db.QuangCaos where p.isDelete == false & p.ViTri.Contains(key) select p).ToList().ToPagedList(page ?? 1, 10);
                            ViewBag.record = "1";
                            return View(qc); break;
                    }
                    return View();
                }
            }
            catch (Exception)
            {
                return RedirectToAction("SystemErrors", "Default");
            }       
        }

        [HttpPost]
        public ActionResult Multi_Delete(IEnumerable<int> advertiseIdsToDelete)
        {
            try
            {
                var qc_delete = db.QuangCaos.Where(x => advertiseIdsToDelete.Contains(x.QuangCaoId)).ToList();
                foreach (var qc in qc_delete)
                {
                    qc.isDelete = true;
                    UpdateModel(qc);
                    db.SaveChanges();
                    //db.Feedbacks.Remove(fb);
                }
                //db.SaveChanges();
                return RedirectToAction("Default", "AdminAdvertise");
            }
            catch (Exception)
            {
                return RedirectToAction("SystemErrors", "Default");
            }            
        }

        public ActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Create(AdvViewModels adv, HttpPostedFileBase uploadFile)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (adv.NgayBatDau.Date < DateTime.Now.Date)
                    {
                        ModelState.AddModelError("NgayBatDau", "Ngày bắt đầu không được nhỏ hơn ngày hiện tại.");
                    }
                    else if (adv.NgayKetThuc.Date < DateTime.Now.Date)
                    {
                        ModelState.AddModelError("NgayKetThuc", "Ngày kết thúc không được nhỏ hơn ngày hiện tại.");
                    }
                    else if (adv.NgayBatDau.Date == adv.NgayKetThuc.Date)
                    {
                        ModelState.AddModelError("NgayKetThuc", "Ngày kết thúc không được bằng ngày bắt đầu.");
                    }
                    else if (adv.NgayBatDau.Date > adv.NgayKetThuc.Date)
                    {
                        ModelState.AddModelError("NgayKetThuc", "Ngày kết thúc không được nhỏ hơn ngày bắt đầu.");
                    }
                    else
                    {
                        //Thêm quảng cáo mới
                        QuangCao qc = new QuangCao();
                        qc.TenCtyQuangCao = adv.TenCtyQuangCao;
                        qc.ViTri = adv.ViTri;
                        qc.GiaTien = decimal.Parse(adv.GiaTien.ToString());
                        qc.LinkLienKet = adv.LinkLienKet;
                        qc.NgayBatDau = adv.NgayBatDau;
                        qc.NgayKetThuc = adv.NgayKetThuc;
                        //Upload hinh anh
                        if (uploadFile != null && uploadFile.ContentLength > 0)
                        {
                            var fileName = Path.GetFileName(uploadFile.FileName);
                            var path = Path.Combine(Server.MapPath("~/Images/Adver/"), fileName); uploadFile.SaveAs(path);
                            qc.HinhAnh = fileName;
                        }
                        qc.TrangThai = adv.TrangThai;
                        qc.isDelete = false;
                        db.QuangCaos.Add(qc);
                        db.SaveChanges();
                        ModelState.Clear();
                        adv = new AdvViewModels();
                        ModelState.AddModelError("", "Bạn đã thêm quảng cáo thành công...!");  // hien thi thong bao
                    }
                }
                return View(adv);
            }
            catch (Exception)
            {
                return RedirectToAction("SystemErrors", "Default");
            }           
        }

        public ActionResult Update(int id)
        {
            var qc = (from p in db.QuangCaos where p.QuangCaoId == id select p).First();
            return View(qc);
        }
        [HttpPost]
        public ActionResult Update(int id, FormCollection col, HttpPostedFileBase uploadFile)
        {
            try
            {
                var qc = (from p in db.QuangCaos where p.QuangCaoId == id select p).First();
                qc.TenCtyQuangCao = col["TenCtyQuangCao"];
                qc.ViTri = col["ViTri"];
                qc.GiaTien = Decimal.Parse(col["GiaTien"]);
                qc.LinkLienKet = col["LinkLienKet"];
                qc.NgayBatDau = DateTime.Parse(col["NgayBatDau"]);
                qc.NgayKetThuc = DateTime.Parse(col["NgayKetThuc"]);
                qc.TrangThai = bool.Parse(col["TrangThai"]);
                //Upload hinh anh
                if (uploadFile != null && uploadFile.ContentLength > 0)
                {
                    var fileName = Path.GetFileName(uploadFile.FileName);
                    var path = Path.Combine(Server.MapPath("~/Images/Adver/"), fileName); uploadFile.SaveAs(path);
                    qc.HinhAnh = fileName;
                }
                UpdateModel(qc);
                db.SaveChanges();
                ModelState.AddModelError("", "Cập nhật thành công.");
                return RedirectToAction("Default");
            }
            catch (Exception)
            {
                return RedirectToAction("SystemErrors", "Default");
            }            
        }

        public ActionResult Delete(int id)
        {
            try
            {
                QuangCao qc = (from p in db.QuangCaos where p.QuangCaoId == id select p).First();
                qc.isDelete = true;
                UpdateModel(qc);
                db.SaveChanges();
                return RedirectToAction("Default", "AdminAdvertise");
            }
            catch (Exception)
            {
                return RedirectToAction("SystemErrors", "Default");
            }           
        }

        public ActionResult Search()
        {
            return View();
        }

    }
}
